import storage from 'good-storage'

const SEARCH_KEY = '__search__' // 搜索的key（因为存贮都需要一个key）
const SEARCH_MAX_LEN = 15 // 搜索列表缓存的长度

const PLAY_KEY = '__play__' // 歌曲播放历史的key
const PLAY_MAX_LEN = 200 // 歌曲播放历史可以展示最近播放的200首

const FAVORITE_KEY = '__favorite__' // 歌曲收藏的key
const FAVORITE_MAX_LEN = 200 // 歌曲收藏列表的总的长度

// 插入数据
function insertArray (arr, val, compare, maxLen) {
  const index = arr.findIndex(compare) // compare 比较函数是否存在value的值
  if (index === 0) {
    return
  }
  if (index > 0) { // 如果数组中有这个值，而且还不是第一个位置
    arr.splice(index, 1)
  }
  arr.unshift(val) // 就删掉原来存在的，然后把新的值放在最前面
  if (maxLen && arr.length > maxLen) {
    arr.pop() // 如果整个数据的长度大于原来的数据长度就把最后一个pop出来
  }
}

function deleteFromArray (arr, compare) {
  const index = arr.findIndex(compare)
  if (index > -1) {
    arr.splice(index, 1)
  }
}

// 保存搜索历史记录(最新搜索的记录都放在最前面)
export function saveSearch (query) {
  let searches = storage.get(SEARCH_KEY, [])
  insertArray(searches, query, (item) => {
    return item === query
  }, SEARCH_MAX_LEN)
  storage.set(SEARCH_KEY, searches)
  return searches
}

// 删除搜索历史记录
export function deleteSearch (query) {
  let searches = storage.get(SEARCH_KEY, [])
  deleteFromArray(searches, (item) => {
    return item === query
  })
  storage.set(SEARCH_KEY, searches)
  return searches
}

// 清空搜索历史记录
export function clearSearch () {
  storage.remove(SEARCH_KEY)
  return []
}

// 从本地缓存读取search的值
export function loadSearch () {
  return storage.get(SEARCH_KEY, [])
}

// 缓存播放的歌曲作为歌曲播放历史
export function savePlay (song) {
  let songs = storage.get(PLAY_KEY, [])
  insertArray(songs, song, (item) => {
    return song.id === item.id
  }, PLAY_MAX_LEN)
  storage.set(PLAY_KEY, songs) // 缓存
  return songs
}
// 读取缓存播放过的数据 （用于store的state数据使用）
export function loadPlay () {
  return storage.get(PLAY_KEY, [])
}
// 收藏歌曲
export function saveFavorite (song) {
  let songs = storage.get(FAVORITE_KEY, [])
  insertArray(songs, song, (item) => {
    return song.id === item.id
  }, FAVORITE_MAX_LEN)
  storage.set(FAVORITE_KEY, songs)
  return songs
}
// 删除收藏歌曲
export function deleteFavorite (song) {
  let songs = storage.get(FAVORITE_KEY, [])
  deleteFromArray(songs, (item) => {
    return item.id === song.id
  })
  storage.set(FAVORITE_KEY, songs)
  return songs
}
// 加载收藏歌曲列表（用于store的state数据使用）
export function loadFavorite () {
  return storage.get(FAVORITE_KEY, [])
}

